package org.phoenicis.javafx.views.common;
import javafx.beans.binding.Bindings;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.transformation.FilteredList;
import javafx.collections.transformation.SortedList;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.Function;
import static org.junit.Assert.assertEquals;
/**
* Created by marc on 01.04.17.
*/
public class ExpandedListTest {
@Test
public void testListCreation() {
ObservableList<List<String>> observableList = FXCollections.observableArrayList(Arrays.asList("11"),
Arrays.asList("21", "22"), Arrays.asList());
ExpandedList<String, List<String>> expandedList = new ExpandedList<>(observableList, Function.identity());
List<String> actual = new ArrayList<>();
Bindings.bindContent(actual, expandedList);
assertEquals(3, expandedList.size());
assertEquals("11", expandedList.get(0));
assertEquals("21", expandedList.get(1));
assertEquals("22", expandedList.get(2));
assertEquals(3, actual.size());
assertEquals("11", actual.get(0));
assertEquals("21", actual.get(1));
assertEquals("22", actual.get(2));
}
@Test
public void testListAdd() {
ObservableList<List<String>> observableList = FXCollections.observableArrayList(Arrays.asList("11"),
Arrays.asList("21", "22"), Arrays.asList());
ExpandedList<String, List<String>> expandedList = new ExpandedList<>(observableList, Function.identity());
List<String> actual = new ArrayList<>();
Bindings.bindContent(actual, expandedList);
assertEquals(3, expandedList.size());
assertEquals("11", expandedList.get(0));
assertEquals("21", expandedList.get(1));
assertEquals("22", expandedList.get(2));
assertEquals(3, actual.size());
assertEquals("11", actual.get(0));
assertEquals("21", actual.get(1));
assertEquals("22", actual.get(2));
observableList.add(1, Arrays.asList("01", "02"));
assertEquals(5, expandedList.size());
assertEquals("11", expandedList.get(0));
assertEquals("01", expandedList.get(1));
assertEquals("02", expandedList.get(2));
assertEquals("21", expandedList.get(3));
assertEquals("22", expandedList.get(4));
assertEquals(5, actual.size());
assertEquals("11", actual.get(0));
assertEquals("01", actual.get(1));
assertEquals("02", actual.get(2));
assertEquals("21", actual.get(3));
assertEquals("22", actual.get(4));
}
@Test
public void testListRemove1() {
ObservableList<List<String>> observableList = FXCollections.observableArrayList(Arrays.asList("11"),
Arrays.asList("21", "22"), Arrays.asList());
ExpandedList<String, List<String>> expandedList = new ExpandedList<>(observableList, Function.identity());
List<String> actual = new ArrayList<>();
Bindings.bindContent(actual, expandedList);
assertEquals(3, expandedList.size());
assertEquals("11", expandedList.get(0));
assertEquals("21", expandedList.get(1));
assertEquals("22", expandedList.get(2));
assertEquals(3, actual.size());
assertEquals("11", actual.get(0));
assertEquals("21", actual.get(1));
assertEquals("22", actual.get(2));
observableList.remove(0);
assertEquals(2, expandedList.size());
assertEquals("21", expandedList.get(0));
assertEquals("22", expandedList.get(1));
assertEquals(2, actual.size());
assertEquals("21", actual.get(0));
assertEquals("22", actual.get(1));
}
@Test
public void testListRemove2() {
ObservableList<List<String>> observableList = FXCollections.observableArrayList(Arrays.asList("11"),
Arrays.asList("21", "22"), Arrays.asList());
ExpandedList<String, List<String>> expandedList = new ExpandedList<>(observableList, Function.identity());
List<String> actual = new ArrayList<>();
Bindings.bindContent(actual, expandedList);
assertEquals(3, expandedList.size());
assertEquals("11", expandedList.get(0));
assertEquals("21", expandedList.get(1));
assertEquals("22", expandedList.get(2));
assertEquals(3, actual.size());
assertEquals("11", actual.get(0));
assertEquals("21", actual.get(1));
assertEquals("22", actual.get(2));
observableList.remove(1);
assertEquals(1, expandedList.size());
assertEquals("11", expandedList.get(0));
assertEquals(1, actual.size());
assertEquals("11", actual.get(0));
}
@Test
public void testListRemove3() {
ObservableList<List<String>> observableList = FXCollections.observableArrayList(Arrays.asList("11"),
Arrays.asList("21", "22"), Arrays.asList());
ExpandedList<String, List<String>> expandedList = new ExpandedList<>(observableList, Function.identity());
List<String> actual = new ArrayList<>();
Bindings.bindContent(actual, expandedList);
assertEquals(3, expandedList.size());
assertEquals("11", expandedList.get(0));
assertEquals("21", expandedList.get(1));
assertEquals("22", expandedList.get(2));
assertEquals(3, actual.size());
assertEquals("11", actual.get(0));
assertEquals("21", actual.get(1));
assertEquals("22", actual.get(2));
observableList.remove(2);
assertEquals(3, expandedList.size());
assertEquals("11", expandedList.get(0));
assertEquals("21", expandedList.get(1));
assertEquals("22", expandedList.get(2));
assertEquals(3, actual.size());
assertEquals("11", actual.get(0));
assertEquals("21", actual.get(1));
assertEquals("22", actual.get(2));
}
@Test
public void testListUpdate1() {
ObservableList<List<String>> observableList = FXCollections.observableArrayList(Arrays.asList("11"),
Arrays.asList("21", "22"), Arrays.asList());
ExpandedList<String, List<String>> expandedList = new ExpandedList<>(observableList, Function.identity());
List<String> actual = new ArrayList<>();
Bindings.bindContent(actual, expandedList);
assertEquals(3, expandedList.size());
assertEquals("11", expandedList.get(0));
assertEquals("21", expandedList.get(1));
assertEquals("22", expandedList.get(2));
assertEquals(3, actual.size());
assertEquals("11", actual.get(0));
assertEquals("21", actual.get(1));
assertEquals("22", actual.get(2));
observableList.set(2, Arrays.asList("31", "32", "33"));
assertEquals(6, expandedList.size());
assertEquals("11", expandedList.get(0));
assertEquals("21", expandedList.get(1));
assertEquals("22", expandedList.get(2));
assertEquals("31", expandedList.get(3));
assertEquals("32", expandedList.get(4));
assertEquals("33", expandedList.get(5));
assertEquals(6, actual.size());
assertEquals("11", actual.get(0));
assertEquals("21", actual.get(1));
assertEquals("22", actual.get(2));
assertEquals("31", actual.get(3));
assertEquals("32", actual.get(4));
assertEquals("33", actual.get(5));
}
@Test
public void testListUpdate2() {
FilteredList<List<String>> observableList = FXCollections
.observableArrayList(Arrays.asList("11"), Arrays.asList("21", "22"), Arrays.asList("31"))
.filtered(value -> true);
ExpandedList<String, List<String>> expandedList = new ExpandedList<>(observableList, Function.identity());
List<String> actual = new ArrayList<>();
Bindings.bindContent(actual, expandedList);
assertEquals(4, expandedList.size());
assertEquals("11", expandedList.get(0));
assertEquals("21", expandedList.get(1));
assertEquals("22", expandedList.get(2));
assertEquals("31", expandedList.get(3));
assertEquals(4, actual.size());
assertEquals("11", actual.get(0));
assertEquals("21", actual.get(1));
assertEquals("22", actual.get(2));
assertEquals("31", actual.get(3));
observableList.setPredicate(value -> value.size() != 1);
assertEquals(2, expandedList.size());
assertEquals("21", expandedList.get(0));
assertEquals("22", expandedList.get(1));
assertEquals(2, actual.size());
assertEquals("21", actual.get(0));
assertEquals("22", actual.get(1));
observableList.setPredicate(value -> true);
assertEquals(4, expandedList.size());
assertEquals("11", expandedList.get(0));
assertEquals("21", expandedList.get(1));
assertEquals("22", expandedList.get(2));
assertEquals("31", expandedList.get(3));
assertEquals(4, actual.size());
assertEquals("11", actual.get(0));
assertEquals("21", actual.get(1));
assertEquals("22", actual.get(2));
assertEquals("31", actual.get(3));
}
@Test
public void testListPermutation() {
SortedList<List<String>> observableList = FXCollections
.<List<String>> observableArrayList(Arrays.asList("11"), Arrays.asList("21", "22"), Arrays.asList())
.sorted(Comparator.comparing(List::size));
ExpandedList<String, List<String>> expandedList = new ExpandedList<>(observableList, Function.identity());
List<String> actual = new ArrayList<>();
Bindings.bindContent(actual, expandedList);
assertEquals(3, expandedList.size());
assertEquals("11", expandedList.get(0));
assertEquals("21", expandedList.get(1));
assertEquals("22", expandedList.get(2));
assertEquals(3, actual.size());
assertEquals("11", actual.get(0));
assertEquals("21", actual.get(1));
assertEquals("22", actual.get(2));
observableList.comparatorProperty().set(Comparator.comparing(o -> ((List<String>) o).size()).reversed());
assertEquals(3, expandedList.size());
assertEquals("21", expandedList.get(0));
assertEquals("22", expandedList.get(1));
assertEquals("11", expandedList.get(2));
assertEquals(3, actual.size());
assertEquals("21", actual.get(0));
assertEquals("22", actual.get(1));
assertEquals("11", actual.get(2));
}
}